interface Node {
	val: number;
	children: Node[];
}

/**
 * **[429. N 叉树的层序遍历](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)**
 *
 * 给定一个 N 叉树，返回其节点值的层序遍历。（即从左到右，逐层遍历）。
 *
 * 树的序列化输入是用层序遍历，每组子节点都由 null 值分隔（参见示例）。
 *
 * @param root
 * @returns
 */
export default function (root: Node | null): number[][] {
	if (!root) return [];

	const result: number[][] = [];

	let nextLevel: (Node | null)[] = [root];
	while (!!nextLevel.length) {
		let newLevel: (Node | null)[] = [];
		const res: number[] = [];
		nextLevel.forEach((node) => {
			if (!node) return;

			res.push(node.val);
			newLevel = newLevel.concat(node.children);
		});

		result.push(res);
		nextLevel = newLevel;
	}

	return result;
}
